#ifndef SOCKET_H
#define SOCKET_H

#define SOCKET_INVALIDO -1

#include "mutex.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <unistd.h>
#include <string>

using namespace red::hilos::thread;
using namespace std;

namespace red {
namespace sockets {

class Socket {

public:

	Socket();
	virtual ~Socket();

	bool getUtilizable();

	bool send(const string &p_sBuffer, unsigned int &p_wCantEnviada);
	bool recv(string &p_sBuffer, unsigned int p_wCantARecibir, unsigned int &p_wCantRecibida);

protected:

	bool create();
	bool isValid();
	void close();

	void setUtilizable(bool p_bUtilizable);

	int m_Socket;
	sockaddr_in m_sockaddr_in;
	Mutex m_Mutex_bUtilizable;
	bool m_bUtilizable;
};

}
}

#endif
